 package org.stvd.service.admin;

import java.util.List;
import java.util.Map;

import org.stvd.core.dto.QueryResult;
import org.stvd.entities.admin.RoleMenu;
import org.stvd.entities.admin.Roles;
import org.stvd.entities.admin.UserRole;
import org.stvd.service.base.BaseService;

/**
 * @Title: RolesService
 * @Description: 系统角色业务层接口类
 * @author houzx
 * @date 2020年8月18日
 */
public interface RolesService extends BaseService<Roles> {

    /**
     * @Description: 通过GUID获取用户角色列表
     * @param guid 平台ID
     * @return
     */
    List<Map<String, Object>> listUserRolesByGuid(String guid);
    
    /**
     * @Description: 通过资源ID获取角色列表
     * @param resId 资源ID
     * @return
     */
    List<Roles> getRolesByResId(String resId);

    /**
     * @Description: 通过用户ID和GUID获取角色列表
     * @param userId 用户ID
     * @param guid 平台ID
     * @return
     */
    List<Roles> getRolesByUserId(String userId, String guid);

    /**
     * @Description: 通过机构ID和GUID获取角色列表
     * @param depId 机构ID
     * @param guid 平台ID
     * @return
     */
    List<Roles> findRolesByDepId(String depId, String guid);
    
    /**
     * @Description: 通过机构ID和GUID获取启用角色列表
     * @param depId 机构ID
     * @param guid 平台ID
     * @return
     */
    List<Roles> findValidRolesByDepId(String depId, String guid);
    /**
     * @Description: 通过角色ID和GUID获取角色菜单列表
     * @param roleId 角色ID
     * @param guid 平台ID
     * @return
     */
    List<RoleMenu> findRoleMenuByRoleId(String roleId, String guid);

    /**
     * @Description: 通过条件查询角色集合
     * @param start
     * @param limit
     * @param depId 机构ID
     * @param guid 平台ID
     * @return
     */
    QueryResult<Roles> getRoleQueryResult(int start, int limit, String depId, String guid);

    /**
     * @Description: 插入角色菜单
     * @param roleId 角色ID
     * @param menuIds 菜单ID串
     * @param guid 平台ID
     */
    void insertRoleMenu(String roleId, String[] menuIds, String guid);
    
    /**
     * @Description: 插入角色资源
     * @param roleId 角色ID
     * @param resIds 资源ID串
     * @param guid 平台ID
     */
    void insertRoleRes(String roleId, String[] resIds, String guid);
    
    /**
     * @Description: 删除角色信息
     * @param roleId 角色ID
     * @param guid 平台ID
     * @throws Exception
     */
    void deleteRole(Object roleId, String guid) throws Exception;

    /**
     * 用户插入全平台（仅限有该角色的平台）角色信息
     * @param userId 用户ID
     * @param roleCode 角色编码
     */
    public void insertUserRole(String userId, String roleCode);
    
    /**
     * 用户插入角色信息
     * @param userId 用户ID
     * @param roleCode 角色编码
     * @param guid 平台ID
     */
    public void insertUserRole(String userId, String roleCode, String guid);
    
    /**
     * 删除用户全平台（仅限有该角色的平台）角色信息
     * @param userId 用户ID
     * @param roleCode 角色编码
     */
    public void deleteUserRole(String userId, String roleCode);
    
    /**
     * 删除用户角色信息
     * @param userId 用户ID
     * @param roleCode 角色编码
     * @param guid 平台ID
     */
    public void deleteUserRole(String userId, String roleCode, String guid);
    
    /**
     * 根据条件查询角色信息
     * @param roleCode 角色编码
     * @param guid 平台ID
     * @return
     */
    public Roles getRolesByRoleCode(String roleCode, String guid);
    
    /**
     * 根据条件查询用户角色y映射
     * @param userId 用户ID
     * @param roleCode 角色编码 
     * @param guid 平台ID
     * @return
     */
    public UserRole getUserRoleByRoleCode(String userId, String roleCode, String guid);
}
